﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once

#include "CollaborationCacheInterface.h"
#include "IObject.h"

namespace gcmp
{
    /// \brief 构件级协同，Element强弱依赖关系版本号本地缓存管理
    class COLLABORATION_CACHE_INTERFACE_EXPORT IElementRelationshipsVersionManager : public IObject
    {
        DEFINE_CAST_DERIVED(IElementRelationshipsVersionManager, IObject)
    public:  
        /// \brief 向缓存中设置Element强弱依赖关系版本号
        ///
        /// 不存在添加，存在用新值覆盖
        ///
        /// \param elementId 需要设置版本的ElementId
        /// \param elementRelationshipsVersion Element强弱依赖关系版本号
        /// \return void
        virtual void Set(const ElementId& elementId, const std::vector<std::pair<Int64, Int32>>& elementRelationshipsVersion) = 0;
        
        /// \brief 从缓存中获取Element强弱依赖关系版本号
        ///
        /// \param elementId 需要获取强弱依赖关系版本的ElementId
        /// \param elementRelationshipsVersion Element强弱依赖关系版本号
        /// \return void
        virtual void Get(const ElementId& elementId, std::vector<std::pair<Int64, Int32>>& elementRelationshipsVersion) const = 0;

        /// \brief 更新缓存中Element版本号
        ///
        /// \param elementVersions 需要更新的构件及版本
        /// \return void
        virtual void Update(const std::unordered_map<Int64, Int32>& elementVersions) = 0;

        /// \brief 从缓存中清理所有Element的版本
        ///
        /// \return void
        virtual void Clear() = 0;
    };
}
